// 小红书自动化养号脚本

// 初始化配置
const config = {
  searchKeywords: [
    "贵阳教师招聘", 
    "贵阳教师职位", 
    "贵阳教师资格考试", 
    "贵阳教师招考信息", 
    "贵阳教师招聘培训机构", 
    "顶格教育",
    "贵阳市教师招聘",
    "贵阳市教师招聘信息",
    "贵阳市教师招聘培训",
    "顶格教育APP",
  ], // 搜索关键词
  commentTexts: ["习惯好评！"], // 评论内容池

  operateCount: 10, // 每天操作数量 ---- 根据搜索关键词循环
  scrollCount: 1, // 每次浏览滑动次数 ---- 每个搜索结果页循环
  waitTime: 3000, // 操作等待时间
};

// 1. 主函数
function main() {
  // 启动小红书
  launchApp("小红书");
  sleep(5000);

  // 检查是否成功启动
  if (!checkAppRunning()) {
    toast("小红书启动失败");
    return;
  }

  // 执行养号操作
  for (let i = 0; i < config.operateCount; i++) {
    // 随机获取关键词
    let keyword = randomChoice(config.searchKeywords);
    console.log("开始搜索: " + keyword);
    toast("开始搜索: " + keyword);

    // 执行搜索和互动
    if (searchAndInteract(keyword, i)) {
      toast("第" + (i + 1) + "次操作完成");
      console.log("第" + (i + 1) + "次操作完成***************************");
    } else {
      toast("第" + (i + 1) + "次操作失败");
      console.log("第" + (i + 1) + "次操作失败***************************");
    }

    // 随机等待避免频繁操作
    sleep(random(2000, 5000));
  }

  console.log("养号任务完成");
  toast("养号任务完成");
}

// 2. 搜索并互动
function searchAndInteract(keyword, i) {
  console.log('2. 搜索并互动___第' + (i + 1) + '次操作');
  
  try {
    // 点击搜索按钮
    if (i === 0) { // 第一次hit搜索按钮
      let searchBtn = className("android.widget.Button")
        .desc("搜索")
        .findOne(5000);
      if (searchBtn) {
        searchBtn.click();
        sleep(2000);
      } else {
        // 如果找不到搜索按钮，中断
        console.log('无法找到搜索按钮');
        return false;
      }
    } else { // 清楚搜索框
      let clearBtn = id("0_resource_name_obfuscated")
        .className("android.widget.Button")
        .desc("全部删除")
        .findOne(5000);
      if (clearBtn) {
        clearBtn.click();
        sleep(2000);
      }
    }

    // 输入搜索关键词
    let searchInput = className("android.widget.EditText").findOne(5000);
    if (searchInput) {
      searchInput.setText(keyword);
      sleep(2000);

      // 点击搜索按钮或回车
      let confirmBtn = text("搜索").findOne(3000);
      if (confirmBtn) {
        confirmBtn.click();
      } else {
        console.log('搜索按钮点击失败');
        return false;
      }
      sleep(3000);

      // 浏览搜索结果
      browseSearchResults();

      return true;
    }
  } catch (e) {
    log("搜索互动出错: " + e);
  }
  return false;
}

// 3. 浏览搜索结果并互动
function browseSearchResults() {
  console.log('3. 浏览搜索结果并互动');
  
  for (let i = 0; i < config.scrollCount; i++) {
    // 随机选择一篇笔记点击
    let notes = id("0_resource_name_obfuscated")
    .className("androidx.recyclerview.widget.RecyclerView")
    .scrollable(true)
    .depth(10)
    .findOne()
    .children();

    if (notes.length > 0) {
      let randomNote = randomChoice(notes);

      // 判断随机选择的元素是否是笔记
      if (!randomNote.child(0).className().includes("android.widget.RelativeLayout")) {
        console.log('随机选择的元素不是笔记');
        break;
      }
      
      // 点击笔记
      randomNote.click();
      sleep(3000);

      // 在笔记详情页进行互动
      interactWithNote();

      // 返回搜索结果页
      // id("0_resource_name_obfuscated").className("android.widget.Button").desc("返回").findOne().click();
      back();
      sleep(2000);
      back();
      console.log('笔记阅读结束，返回上一页');
      
      sleep(2000);
    }

    // 滑动到下一页
    swipe(
      device.width / 2,
      device.height * 0.8,
      device.width / 2,
      device.height * 0.2,
      random(500, 1000)
    );
    sleep(2000);
  }
}

// 4. 在笔记页面进行互动
function interactWithNote() {
  console.log('4. 在笔记页面进行互动');
  
  try {
    // 模拟阅读 - 随机滑动
    let scrollTimes = random(3, 8);
    for (let j = 0; j < scrollTimes; j++) {
      swipe(
        device.width / 2,
        device.height * 0.7,
        device.width / 2,
        device.height * 0.3,
        random(800, 1200)
      );
      sleep(random(1000, 3000));
    }

    // 随机点赞 (70%概率)
    // if (Math.random() < 0.7) {
    //   let likeBtn = findLikeButton();
    //   console.log(66666, likeBtn);
      
    //   if (likeBtn) {
    //     likeBtn.click();
    //     sleep(1000);
    //     toast("点赞成功");
    //   }
    // }

    // 随机收藏 (50%概率)
    // if (Math.random() < 0.5) {
    //   let collectBtn = findCollectButton();
    //   if (collectBtn) {
    //     collectBtn.click();
    //     sleep(1000);
    //     toast("收藏成功");
    //   }
    // }

    // 随机评论 (30%概率)
    // if (Math.random() < 0.3) {
    //     if (addComment()) {
    //         toast("评论成功");
    //     }
    // }

    // 随机关注 (20%概率)
    // if (Math.random() < 0.2) {
    //   let followBtn = findFollowButton();
    //   if (followBtn && followBtn.text().includes("关注")) {
    //     followBtn.click();
    //     sleep(1000);
    //     toast("关注成功");
    //   }
    // }
  } catch (e) {
    log("互动出错: " + e);
  }
}

// 5. 查找点赞按钮
function findLikeButton() {
  // 多种方式查找点赞按钮
  let likeSelectors = [
    () => id("0_resource_name_obfuscated").className("android.widget.Button").descStartsWith("点赞").findOne(),
  ];

  for (let selector of likeSelectors) {
    let btn = selector();
    if (btn) return btn;
  }
  return null;
}

// 6. 查找收藏按钮
function findCollectButton() {
  let collectSelectors = [
    () =>
      className("android.widget.ImageView").descContains("收藏").findOne(3000),
    () =>
      className("android.widget.ImageView")
        .descContains("collect")
        .findOne(3000),
  ];

  for (let selector of collectSelectors) {
    let btn = selector();
    if (btn) return btn;
  }
  return null;
}

// 7. 查找关注按钮
function findFollowButton() {
  return className("android.widget.TextView").text("关注").findOne(3000);
}

// 8. 添加评论
function addComment() {
  try {
    // 查找评论按钮或输入框
    let commentBtn =
      className("android.widget.TextView").textContains("评论").findOne(3000) ||
      className("android.widget.EditText").text("说点什么...").findOne(3000);

    if (commentBtn) {
      commentBtn.click();
      sleep(2000);

      // 输入评论
      let commentInput = className("android.widget.EditText").findOne(3000);
      if (commentInput) {
        let comment = randomChoice(config.commentTexts);
        commentInput.setText(comment);
        sleep(1000);

        // 发送评论
        let sendBtn = text("发送").findOne(3000) || text("发布").findOne(3000);
        if (sendBtn) {
          sendBtn.click();
          sleep(2000);
          return true;
        }
      }
    }
  } catch (e) {
    log("评论出错: " + e);
  }
  return false;
}

// 工具函数 *********************** start

// 随机选择
function randomChoice(array) {
  return array[Math.floor(Math.random() * array.length)];
}

// 随机数
function random(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}
// 检查应用是否运行
function checkAppRunning() {
  if(id("0_resource_name_obfuscated").className("android.view.ViewGroup").desc("首页").exists()){
    return true;
  }

  return false;
}

// 启动应用
function launchApp(appName) {
  let app = getAppName(appName);
  if (app) {
    app.launch();
  } else {
    // 如果找不到应用，尝试通过包名启动
    launch("com.xingin.xhs");
  }

  console.log('1.启动小红书');
}

// 通过应用名获取应用
function getAppName(name) {
  let app = null;
  try {
    app = packageName(name).findOne(1000);
  } catch (e) {
    // 尝试通过文本查找
    app = text(name).findOne(1000);
  }
  return app;
}

// 工具函数 *********************** end

// 执行脚本
main();
